package br.unifor.ads.pjappfinanceiro.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import br.unifor.ads.pjappfinanceiro.entity.ContaPagar;
import br.unifor.ads.pjappfinanceiro.entity.Fornecedores;

public class ContaPagarDAO {

	private EntityManager em = new EntityManager() {

		@Override
		public Object trataResultSet(ResultSet resultSet) throws SQLException {

			FornecedoresDAO fornecedorDAO = new FornecedoresDAO();
			ContaPagar contaPagar = new ContaPagar();
			contaPagar.setId(resultSet.getInt("id_pagar"));
			contaPagar.setFornecedores(fornecedorDAO.buscarPorId(resultSet
					.getInt("id_for")));
			contaPagar.setDtPagar(resultSet.getDate("data_pagar"));
			contaPagar.setDocumento(resultSet.getString("doc_pagar"));
			contaPagar.setReferente(resultSet.getString("referente_´pagar"));
			contaPagar.setValor(resultSet.getDouble("valor_pagar"));
			contaPagar.setStatus(resultSet.getString("status_pagar"));
			return contaPagar;
		}
	};

	public void salvar(ContaPagar contaPagar) throws SQLException {

		String sql = "insert into tb_contapagar(id_for, data_pagar, "
				+ "doc_pagar, referente_pagar, valor_pagar, status_pagar) values (?, ?, ?, ?, ?, ?)";
		em.executeQuery(sql, contaPagar.getFornecedores().getId(),
				contaPagar.getDtPagar(), contaPagar.getDocumento(),
				contaPagar.getReferente(), contaPagar.getValor(),
				contaPagar.getStatus());
	}

	public void atualizar(ContaPagar contaPagar) throws SQLException {

		String sql = "update tb_contapagar set id_for = ?, data_pagar = ?, "
				+ "doc_pagar = ?, referente_pagar = ?, valor_pagar = ?, "
				+ "status_pagar = ? where id_pagar = ?  ";
		em.executeQuery(sql, contaPagar.getFornecedores().getId(),
				contaPagar.getDtPagar(), contaPagar.getDocumento(),
				contaPagar.getReferente(), contaPagar.getValor(),
				contaPagar.getStatus(), contaPagar.getId());

	}

	public void excluirPorId(Integer id) throws SQLException {
		String sql = "delete from tb_contapagar where id_pagar = ?";
		em.executeQuery(sql, id);
	}

	public void excluirTodos() throws SQLException {

		String sql = "delete from tb_contapagar";
		em.executeQuery(sql);
	}

	public Fornecedores buscarPorId(Integer id) throws SQLException {

		String sql = "select id_for, data_pagar, "
				+ "doc_pagar, referente_pagar, valor_pagar, "
				+ "status_pagar "
				+ "from tb_contapagar where id_pagar = ?";
		return (Fornecedores) em.getSingleResult(sql, id);
	}

	@SuppressWarnings("unchecked")
	public List<Fornecedores> buscarTodos() throws SQLException {
		String sql = "select id_for, data_pagar, "
				+ "doc_pagar, referente_pagar, valor_pagar, "
				+ "status_pagar from tb_contapagar";
		return (List<Fornecedores>) em.getResultList(sql);
	}

}
